package com.platform.system.service;

import com.platform.common.core.domain.AjaxResult;
import com.platform.common.core.page.TableDataInfo;
import com.platform.system.domain.dto.device.DeviceInfoDto;
import com.platform.system.domain.dto.device.TenantAuthAiDto;
import com.platform.system.domain.vo.device.DeviceInfoVo;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

/**
 * @author Huangkai
 */
public interface ISysDeviceInfoService {

    /**
     * aiui后处理
     * @param request
     * @return
     */
    String aiuiOperation(HttpServletRequest request);

    /**
     * 切换默认设定的人设
     * @param deviceInfoVo
     * @return
     */
    AjaxResult setDefaultUserDevice(DeviceInfoVo deviceInfoVo);

    /**
     * 根据key查询设备
     * @param key
     * @return
     */
    DeviceInfoDto selectDeviceInfoDtoByKey(String key);

    /**
     * 根据规则进行正则表达式匹配查询
     * @param macRegexp
     * @return
     */
    List<DeviceInfoDto> selectDeviceInfoByRegexp(String macRegexp);

    /**
     * 分页查询
     * @param deviceInfoVo
     * @return
     */
    TableDataInfo selectDeviceInfoList(DeviceInfoVo deviceInfoVo);

    /**
     * 下载模板
     * @param response
     */
    void getImportTemplate(HttpServletResponse response);

    /**
     * 导入数据
     * @param file
     * @exception
     * @return
     */
    AjaxResult importData(MultipartFile file) throws IOException;

    /**
     * 数据上报
     * @param deviceInfoVo
     * @return
     */
    AjaxResult heartDeviceInfo(DeviceInfoVo deviceInfoVo);

    /**
     * 获取租户配置的详情
     * 通过设备信息查询
     * @param deviceInfoVo
     * @return
     */
    TableDataInfo selectTenantAuthAiByDeviceInfo(DeviceInfoVo deviceInfoVo);

    /**
     * 获取客户端用户绑定的设备列表
     * @param deviceInfoVo
     * @return
     */
    List<DeviceInfoDto> selectDeviceInfoDtoByUserId(DeviceInfoVo deviceInfoVo);


    /**
     * 设备在线数
     * @return
     */
    Long getDeviceOnLineCount();

    /**
     * 通过mac获取设备信息
     * @param deviceInfoVo
     */
    DeviceInfoDto selectDeviceInfoByMac(DeviceInfoVo deviceInfoVo);

    /**
     * 设备激活
     * @param deviceInfoVo
     * @return
     */
    AjaxResult activateDevice(DeviceInfoVo deviceInfoVo);

    /**
     * 查询
     * @param uid
     * @return
     */
    DeviceInfoDto selectDeviceInfo(String uid);
    /**
     * 修改日志上报状态
     * @param deviceInfoVo
     * @return
     */
    AjaxResult updateDeviceInfoLogStatus(DeviceInfoVo deviceInfoVo);

    /**
     * 修改状态
     * @param deviceInfoVo
     * @return
     */
    AjaxResult updateDeviceInfoStatus(DeviceInfoVo deviceInfoVo);

    /**
     * 新增
     * @param deviceInfoVo
     * @return
     */
    AjaxResult insertDeviceInfo(DeviceInfoVo deviceInfoVo);
    /**
     * 删除
     * @param deviceInfoVo
     * @return
     */
    AjaxResult deleteDeviceInfoList(DeviceInfoVo deviceInfoVo);

    /**
     * 修改
     * @param deviceInfoVo
     * @return
     */
    AjaxResult updateDeviceInfo(DeviceInfoVo deviceInfoVo);
}
